package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
JDK5之后推出了一个新的特性：增强型for循环，也称为新循环
新循环可以使用相同的语法遍历集合或数组
语法：
for(元素类型 e : 集合或数组){
}
 */
public class NewForDemo {
    public static void main(String[] args) {
        String[] array={"one","two","three","four","five"};
        for (int i=0;i<array.length;i++){
            String str = array[i];
            System.out.println(str);
        }
        /*
        新循环是编译器认可而非虚拟机
        编译器在编译代码时会将新循环遍历数组改回普通for循环遍历
         */
        for (String s: array){
            System.out.println(s);
        }

/*
JDK5之后java支持了另一个特性：泛型
泛型也成为参数化类型，允许我们在使用一个类时指定该类某个属性
或方法参数 或返回值的类型，使得我们使用更翻遍
泛型在集合中被广泛使用，用于规定集合中的元素类型
 */
//使用反向规定当前集合的元素类型为String

        Collection<String> c = new ArrayList<>();
        c.add("一");//编译器会检查传入的实参是否为String
        c.add("二");
        c.add("三");
        c.add("四");
        c.add("五");
        //c.add(123);编译不通过,实参不符合泛型要求
        System.out.println(c);
        /*
        编译器会将新循环遍历集合改为迭代器遍历，因此同样要注意，在遍历
        的过程中不要通过集合的方法增删元素，否则会抛异常
         */
        //集合指定泛型后，获取集合元素时无需造型
        for (String o : c){
            System.out.println(o);
        }

        Iterator<String> it = c.iterator();
        while (it.hasNext()){
            String e = it.next();
            System.out.println(e);
        }
    }
}
